import pandas as pd
import numpy as np
import matplotlib.pyplot as plot
import plotly.graph_objects as go
import plotly.offline as off
#import plotly.io as pio
#pio.renderers
#pio.renderers.default = "svg"
ls *models*
acp_digital_cliff_cl_models.csv acp_digital_cliff_enr_models.csv
infile='acp_digital_cliff_enr_models.csv'
dfe=pd.read_csv(infile)
dfe.head()
| Data Month | Total Support avg | Enrollment Rate avg | Total Support cur rate | Enrollment Rate cur rate | Total Support +10 pct rate | Enrollment Rate +10 pct rate | Total Support +25 pct rate | Enrollment Rate +25 pct rate | Total Support +50 pct rate | Enrollment Rate +50 pct rate | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 2022-01-01 | 1.886235 | 18.465836 | 1.886235 | 18.465836 | 1.886235 | 18.465836 | 1.886235 | 18.465836 | 1.886235 | 18.465836 |
| 1 | 2022-02-01 | 3.882814 | 19.546085 | 3.882814 | 19.546085 | 3.882814 | 19.546085 | 3.882814 | 19.546085 | 3.882814 | 19.546085 |
| 2 | 2022-03-01 | 6.052887 | 21.244550 | 6.052887 | 21.244550 | 6.052887 | 21.244550 | 6.052887 | 21.244550 | 6.052887 | 21.244550 |
| 3 | 2022-04-01 | 8.304570 | 22.043498 | 8.304570 | 22.043498 | 8.304570 | 22.043498 | 8.304570 | 22.043498 | 8.304570 | 22.043498 |
| 4 | 2022-05-01 | 10.668780 | 23.145114 | 10.668780 | 23.145114 | 10.668780 | 23.145114 | 10.668780 | 23.145114 | 10.668780 | 23.145114 |
dfe.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 48 entries, 0 to 47 Data columns (total 11 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Data Month 48 non-null object 1 Total Support avg 48 non-null float64 2 Enrollment Rate avg 48 non-null float64 3 Total Support cur rate 48 non-null float64 4 Enrollment Rate cur rate 48 non-null float64 5 Total Support +10 pct rate 48 non-null float64 6 Enrollment Rate +10 pct rate 48 non-null float64 7 Total Support +25 pct rate 48 non-null float64 8 Enrollment Rate +25 pct rate 48 non-null float64 9 Total Support +50 pct rate 48 non-null float64 10 Enrollment Rate +50 pct rate 48 non-null float64 dtypes: float64(10), object(1) memory usage: 4.2+ KB
new_funds={'Total Support avg': '60 Days Average',
'Total Support cur rate':'Current Rate',
'Total Support +10 pct rate':'%10 accelerator',
'Total Support +25 pct rate':'%25 accelerator',
'Total Support +50 pct rate':'%50 accelerator'}
new_enr={'Enrollment Rate avg': 'Enrollment Rate 60 Days Average',
'Enrollment Rate cur rate':'Enrollment Rate Current Rate',
'Enrollment Rate +10 pct rate':'Enrollment Rate %10 accelerator',
'Enrollment Rate +25 pct rate':'Enrollment Rate %25 accelerator',
'Enrollment Rate +50 pct rate':'Enrollment Rate %50 accelerator'}
#dfe.rename(columns=new_name,inplace=True)
#dfe.rename(columns=new_enr,inplace=True)
#col_plot=['60 Days Average','Current Rate','%10 accelerator','%25 accelerator','%50 accelerator']
col_plot=['Total Support avg',
'Total Support cur rate',
'Total Support +10 pct rate',
'Total Support +25 pct rate',
'Total Support +50 pct rate']
fig=go.Figure()
for col in col_plot:
data=dfe[col]
ro=dfe[dfe[col]<=100]
p=dfe.iloc[ro.shape[0]-1]
ext=' '.join(col.split()[2:])
enr_r='Enrollment Rate '+' '.join(col.split()[2:])
lab=new_enr[enr_r]
pct=data.shape[0]*[round(p[enr_r],1)]
# print(pct)
#txt=p[lab]
fig.add_trace(
go.Scatter(x=dfe['Data Month'],y=data,name=lab,opacity=0.8,text=pct)
)
fig.add_trace(go.Scatter(x=['2022-01-01','2024-12-01'],y=[100,100],name='100 %',opacity=0.8))
fig.update_layout(xaxis_range=['2022-01-01','2024-12-01'],yaxis_range=[0,120], title_text='ACP Digital Cliff from Enrollemnts')
fig.update_yaxes(title_text='% of Total Funds Spent')
fig.update_xaxes(title_text='Date')
fig.show()
infile='acp_digital_cliff_cl_models.csv'
dfc=pd.read_csv(infile)
dfc.head()
| data_month | total_support_c_pct_c_rate | total_claimed_pct_c_rate | total_support_c_pct_+10pct_rate | total_claimed_pct_+10pct_rate | total_support_c_pct_+25pct_rate | total_claimed_pct_+25pct_rate | total_support_c_pct_+50pct_rate | total_claimed_pct_+50pct_rate | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 2022-01-01 | 1.601950 | 15.682745 | 1.601950 | 15.682745 | 1.601950 | 15.682745 | 1.601950 | 15.682745 |
| 1 | 2022-02-01 | 3.297034 | 16.594520 | 3.297034 | 16.594520 | 3.297034 | 16.594520 | 3.297034 | 16.594520 |
| 2 | 2022-03-01 | 5.137686 | 18.019583 | 5.137686 | 18.019583 | 5.137686 | 18.019583 | 5.137686 | 18.019583 |
| 3 | 2022-04-01 | 7.046646 | 18.688316 | 7.046646 | 18.688316 | 7.046646 | 18.688316 | 7.046646 | 18.688316 |
| 4 | 2022-05-01 | 9.087533 | 19.979848 | 9.087533 | 19.979848 | 9.087533 | 19.979848 | 9.087533 | 19.979848 |
dfc.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 48 entries, 0 to 47 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 data_month 48 non-null object 1 total_support_c_pct_c_rate 48 non-null float64 2 total_claimed_pct_c_rate 48 non-null float64 3 total_support_c_pct_+10pct_rate 48 non-null float64 4 total_claimed_pct_+10pct_rate 48 non-null float64 5 total_support_c_pct_+25pct_rate 48 non-null float64 6 total_claimed_pct_+25pct_rate 48 non-null float64 7 total_support_c_pct_+50pct_rate 48 non-null float64 8 total_claimed_pct_+50pct_rate 48 non-null float64 dtypes: float64(8), object(1) memory usage: 3.5+ KB
new_funds={
'total_support_c_pct_c_rate':'Current Rate',
'total_support_c_pct_+10pct_rate':'%10 accelerator',
'total_support_c_pct_+25pct_rate':'%25 accelerator',
'total_support_c_pct_+50pct_rate':'%50 accelerator'}
new_enr={ 'total_claimed_pct_c_rate': 'Claims Current Rate',
'total_claimed_pct_+10pct_rate':'Claims %10 accelerator',
'total_claimed_pct_+25pct_rate':'Claims %25 accelerator',
'total_claimed_pct_+50pct_rate':'Claims %50 accelerator'}
#dfe.rename(columns=new_name,inplace=True)
#dfe.rename(columns=new_enr,inplace=True)
#col_plot=['60 Days Average','Current Rate','%10 accelerator','%25 accelerator','%50 accelerator']
col_plot=['total_support_c_pct_c_rate',
'total_support_c_pct_+10pct_rate',
'total_support_c_pct_+25pct_rate',
'total_support_c_pct_+50pct_rate']
fig=go.Figure()
for col in col_plot:
data=dfc[col]
ro=dfc[dfc[col]<=100]
p=dfc.iloc[ro.shape[0]-1]
ext='_'.join(col.split('_')[3:])
enr_r='total_claimed_'+ext
lab=new_enr[enr_r]
pct=data.shape[0]*[round(p[enr_r],1)]
# print(pct)
#txt=p[lab]
fig.add_trace(
go.Scatter(x=dfe['Data Month'],y=data,name=lab,opacity=0.8,text=pct)
)
fig.add_trace(go.Scatter(x=['2022-01-01','2024-12-01'],y=[100,100],name='100 %',opacity=0.8))
fig.update_layout(xaxis_range=['2022-01-01','2024-12-01'],yaxis_range=[0,120], title_text='ACP Digital Cliff from Enrollemnts')
fig.update_yaxes(title_text='% of Total Funds Spent')
fig.update_xaxes(title_text='Date')
off.iplot(fig)